#ifndef _NXTDC_H_
#define _NXTDC_H_

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>

#define IN_1 0x00
#define IN_2 0x01
#define IN_3 0x02
#define IN_4 0x03

#define OUT_A 0x00
#define OUT_B 0x01
#define OUT_C 0x02
#define OUT_AB 0x03
#define OUT_AC 0x04
#define OUT_BC 0x05
#define OUT_ABC 0x06

#define IN_TYPE_NO_SENSOR 0x00
#define IN_TYPE_SWITCH 0x01
#define IN_TYPE_TEMPERATURE 0x02
#define IN_TYPE_REFLECTION 0x03
#define IN_TYPE_ANGLE 0x04
#define IN_TYPE_LIGHT_ACTIVE 0x05
#define IN_TYPE_LIGHT_INACTIVE 0x06
#define IN_TYPE_SOUND_DB 0x07
#define IN_TYPE_SOUND_DBA 0x08
#define IN_TYPE_CUSTOM 0x09
#define IN_TYPE_LOWSPEED 0x0A
#define IN_TYPE_LOWSPEED_9V 0x0B
#define IN_TYPE_HISPEED 0x0C
#define IN_TYPE_COLORFULL 0x0D
#define IN_TYPE_COLORRED 0x0E
#define IN_TYPE_COLORGREEN 0x0F
#define IN_TYPE_COLORBLUE 0x10
#define IN_TYPE_COLORNONE 0x11
#define IN_TYPE_COLOREXIT 0x12

#define IN_MODE_RAW 0x00
#define IN_MODE_BOOLEAN 0x20
#define IN_MODE_TRANSITIONCNT 0x40
#define IN_MODE_PERIODCOUNTER 0x60
#define IN_MODE_PCTFULLSCALE 0x80
#define IN_MODE_CELSIUS 0xA0
#define IN_MODE_FAHRENHEIT 0xC0
#define IN_MODE_ANGLESTEP 0xE0
#define IN_MODE_SLOPEMASK 0x1F
#define IN_MODE_MODEMASK 0xE0

int nxtsocket;

/**
* Función que resetea el sensor
* conectado al puerto pasado por parámetro.
**/
int ResetSensor(char port);

/**
* Función que configura el tipo 
* del sensor pasado por parámetro.
**/
int SetSensorType(char port, char type);

/**
* Función que configura el sensor de luz
* conectado al puerto pasado por parámetro.
**/
int SetSensorLight(char port);

/**
* Función que configura el sensor de ruido
* conectado al puerto pasado por parámetro.
**/
int SetSensorSound(char port);

/**
* Funcion que devuelve el valor leído por
* el sensor pasado por parámetro.
* @return valor
**/
int Sensor(char port);

/**
* Función que configura las propiedades del
* sonar conectado al puerto pasado por parámetro.
**/
int SetSensorLowspeed(char port);

/**
* Funcion que devuelve la distancia en cm leída por
* sonar conectado al puerto pasado por parámetro.
* @return valor
**/
int SensorUS(char port);

/**
* Función que emite un pitido a una frecuencia
* y durante una duración pasadas por parámetro.
**/
int PlayTone(unsigned int frequency, unsigned int duration);

/**
* Función que mueve las ruedas hacia delante
* del puerto y a la potencia pasada por parámetro. 
**/
int OnFwd(char port, char power);

/**
* Función que mueve las ruedas hacia atrás
* del puerto y a la potencia pasadas por parámetro. 
**/
int OnRev(char port, char power);

/**
* Función que para las ruedas conectadas
* al puerto pasado por parámetro. 
**/
int Off(char port);

/**
* Función que mueve las ruedas conectadas al puerto
* a la potencia y los grados pasados por parámetro. 
**/
int RotateMotor(char port, char power, long angle);

/**
* Función que mueve de forma sincronizada las ruedas 
* conectadas al puerto a la potencia, los grados y pasados
* por parámetro, además de permitirte indicar si los 
* motores deben pararse al final. 
**/
int RotateMotorEx(char port, char power, long angle, char turnpct, int sync, int stop);

/**
* Función que resetea el número de grados
* de giro del motor.
**/
int ResetRotationCount(char port);

/**
* Función que resetea el número de grados
* de giro del motor relativos al programa.
**/
int ResetTachoCount(char port);

/**
* Funcion que devuelve el número de grados de giro relativos 
* al último reseteo del motor pasado por parámetro
* @return grados
**/
long MotorRotationCount(char port);

/**
* Funcion que devuelve el número de grados de giro absolutos 
* al último reseteo del motor pasado por parámetro
* @return grados
**/
long MotorTachoCount(char port)

#endif
